
<!DOCTYPE html>
<html>
<head>test finally at home
<title>PHP笔记rrrok</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */
/* Author: Nicolas Hery - http://nicolashery.com */
/* Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff */
/* Source: https://github.com/nicolahery/markdownpad-github */

/* RESET
=============================================================================*/

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
}

/* BODY
=============================================================================*/

body {
  font-family: Helvetica, arial, freesans, clean, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  color: #333;
  background-color: #fff;
  padding: 20px;
  max-width: 960px;
  margin: 0 auto;
}

body>*:first-child {
  margin-top: 0 !important;
}

body>*:last-child {
  margin-bottom: 0 !important;
}

/* BLOCKS
=============================================================================*/

p, blockquote, ul, ol, dl, table, pre {
  margin: 15px 0;
}

/* HEADERS
=============================================================================*/

h1, h2, h3, h4, h5, h6 {
  margin: 20px 0 10px;
  padding: 0;
  font-weight: bold;
  -webkit-font-smoothing: antialiased;
}

h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {
  font-size: inherit;
}

h1 {
  font-size: 28px;
  color: #000;
}

h2 {
  font-size: 24px;
  border-bottom: 1px solid #ccc;
  color: #000;
}

h3 {
  font-size: 18px;
}

h4 {
  font-size: 16px;
}

h5 {
  font-size: 14px;
}

h6 {
  color: #777;
  font-size: 14px;
}

body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
  margin-top: 0;
  padding-top: 0;
}

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  margin-top: 0;
  padding-top: 0;
}

h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
  margin-top: 10px;
}

/* LINKS
=============================================================================*/

a {
  color: #4183C4;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

/* LISTS
=============================================================================*/

ul, ol {
  padding-left: 30px;
}

ul li > :first-child, 
ol li > :first-child, 
ul li ul:first-of-type, 
ol li ol:first-of-type, 
ul li ol:first-of-type, 
ol li ul:first-of-type {
  margin-top: 0px;
}

ul ul, ul ol, ol ol, ol ul {
  margin-bottom: 0;
}

dl {
  padding: 0;
}

dl dt {
  font-size: 14px;
  font-weight: bold;
  font-style: italic;
  padding: 0;
  margin: 15px 0 5px;
}

dl dt:first-child {
  padding: 0;
}

dl dt>:first-child {
  margin-top: 0px;
}

dl dt>:last-child {
  margin-bottom: 0px;
}

dl dd {
  margin: 0 0 15px;
  padding: 0 15px;
}

dl dd>:first-child {
  margin-top: 0px;
}

dl dd>:last-child {
  margin-bottom: 0px;
}

/* CODE
=============================================================================*/

pre, code, tt {
  font-size: 12px;
  font-family: Consolas, "Liberation Mono", Courier, monospace;
}

code, tt {
  margin: 0 0px;
  padding: 0px 0px;
  white-space: nowrap;
  border: 1px solid #eaeaea;
  background-color: #f8f8f8;
  border-radius: 3px;
}

pre>code {
  margin: 0;
  padding: 0;
  white-space: pre;
  border: none;
  background: transparent;
}

pre {
  background-color: #f8f8f8;
  border: 1px solid #ccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px;
}

pre code, pre tt {
  background-color: transparent;
  border: none;
}

kbd {
    -moz-border-bottom-colors: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    background-color: #DDDDDD;
    background-image: linear-gradient(#F1F1F1, #DDDDDD);
    background-repeat: repeat-x;
    border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
    border-image: none;
    border-radius: 2px 2px 2px 2px;
    border-style: solid;
    border-width: 1px;
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
    line-height: 10px;
    padding: 1px 4px;
}

/* QUOTES
=============================================================================*/

blockquote {
  border-left: 4px solid #DDD;
  padding: 0 15px;
  color: #777;
}

blockquote>:first-child {
  margin-top: 0px;
}

blockquote>:last-child {
  margin-bottom: 0px;
}

/* HORIZONTAL RULES
=============================================================================*/

hr {
  clear: both;
  margin: 15px 0;
  height: 0px;
  overflow: hidden;
  border: none;
  background: transparent;
  border-bottom: 4px solid #ddd;
  padding: 0;
}

/* TABLES
=============================================================================*/

table th {
  font-weight: bold;
}

table th, table td {
  border: 1px solid #ccc;
  padding: 6px 13px;
}

table tr {
  border-top: 1px solid #ccc;
  background-color: #fff;
}

table tr:nth-child(2n) {
  background-color: #f8f8f8;
}

/* IMAGES
=============================================================================*/

img {
  max-width: 100%
}
</style>
<base href='file:\\\C:\Users\Administrator\Desktop\笔记\php\'/>
</head>
<body>
<h3>php代码的基本结构</h3>
<pre><code>&lt;?php
    echo 'hello';
?&gt;
</code></pre>

<hr/>
<h3>80端口被占用解决：进入注册表（键入regedit -&gt;HKEY<em>LOCAL</em>MACHINE\SYSTEM\CurrentControlSet\services\HTTP）把http里的start的值改为4就可以了，是16进制的。然后重启电脑</h3>
<hr/>
<h3>网络知识</h3>
<p>netstat -aon |findstr &quot;80&quot;  ： 查看80端口所运行的进程，
pid号可以在任务管理器里看到。
netstat -an  查看运行的程序端口及程序。</p>
<hr/>
<h3>修改端口：在安装目录conf下的httpd.conf文件修改端口，如：	listen81</h3>
<hr/>
<h3>欢迎页面</h3>
<h3>http://localhost/pro_1/</h3>
<p><IfModule dir_module>
   DirectoryIndex index.html index.php index.htm hello.php
</IfModule></p>
<hr/>
<h3>php基础语法</h3>
<pre><code>&lt;html&gt;
&lt;head&gt;
 &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;hello.css&quot;&gt;
 &lt;meta name=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;!-- top start--&gt;
&lt;div class=&quot;top&quot;&gt;
123
&lt;/div&gt;
&lt;!-- top end--&gt;

&lt;!--php1 start--&gt;
&lt;?php
    echo &quot;this is php script &lt;br/&gt;&quot;;//br为换行
    echo &quot;你好 ,在这里定义一个变量i,值为50&quot;;
    $i=50;//在这里定义一个变量，在下面的php脚本段里也可以读出来
?&gt;
&lt;!--php1 end--&gt;

&lt;!--php 读出变量 i 的值 start--&gt;
&lt;?php

    echo &quot;&lt;br/&gt;方法1读变量i的值是：&quot;.$i;
    echo &quot;&lt;br/&gt;方法2读变量i的值是：$i&quot;;
    echo &quot;&lt;br/&gt;方法3读变量i的值是：&quot;;
?&gt;
&lt;?=$i?&gt; &lt;!--这是第三种读法--&gt;
&lt;!--php 读出变量 i 的值 end--&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<hr/>
<h3>定义一个变量：以$开头，$_变量名</h3>
<hr/>
<h3>查看一个变量是详情：var_dump（$a）</h3>
<hr/>
<h3>整形，正数和负数的最大值是一样的。如果超过了int的范围，则会被转换为float</h3>
<pre><code>//打印一个整形的大小
echo &quot;int 的大小为 is：&quot;.PHP_INT_SIZE.&quot;&lt;br/&gt;&quot;;
//打印int最大可容纳数
echo &quot;int 最大值为：&quot;.PHP_INT_MAX.&quot;&lt;br/&gt;&quot;;
</code></pre>

<hr/>
<h3>字符串的单双引号问题</h3>
<pre><code>$i=90;
$b=&quot;hello$i&quot;;
$c='hello$i';
echo &quot;双引号是：&quot;.$b.&quot;&lt;br/&gt;&quot;;//hello90
echo &quot;单引号是：&quot;.$c.&quot;&lt;br/&gt;&quot;;//hello$i
</code></pre>

<hr/>
<h3>字符串的长度：echo strlen($len);</h3>
<hr/>
<h3>and的优先级：</h3>
<pre><code>$aa=  false and true;   //false
$bb= true and false;    //true
var_dump($aa);
var_dump($bb);
</code></pre>

<h3>and 与 $$的区别：主要在优先级方面， and &lt; = &lt; $$ 、or &lt; = &lt; ||</h3>
<hr/>
<h3>表达式</h3>
<pre><code>&lt;?php
$a=10;
$b=20;
$c=20-10? 2:&quot;he&quot;;
echo $c;    //结果是2
?&gt;
</code></pre>

<hr/>
<h3>使用instanceof 判断类是否相等,不能判断基本数据类型</h3>
<pre><code>class Cat{}
$cat=new Cat();
var_dump($cat instanceof Cat); //true
</code></pre>

<h3>$d=++3; 这样写是错误的</h3>
<hr/>
<h3>goto 语句</h3>
<pre><code>goto a1;
echo &quot;bb&quot;;
a1:
echo &quot;aa&quot;;
</code></pre>

<hr/>
<h3>常量的定义，前面不要加 $符</h3>
<pre><code>//常量的第一种定义
define(&quot;NUM&quot;,40);
echo &quot;常量是：&quot;.NUM.&quot;&lt;br/&gt;&quot;;

//常量的第二种定义
const num2 =50;
echo &quot;num2 is &quot;.num2;
</code></pre>

<hr/>
<h3>函数</h3>
<h4>（1）.定义</h4>
<pre><code>&lt;?php

    function getNum($i,$j){
        $res=$i+$j;
        return $res;
    }


?&gt;
</code></pre>

<h4>（2）.引入另一个函数文件里的函数的3种方法</h4>
<pre><code>&lt;?php

    //1.函数在funs.php文件定义，在这里把文件引入
    require 'funs.php';

    //2.通过变量引入
    //$fileName=&quot;funs.php&quot;;
    //require $fileName;

    //3.
    require ('funs.php');

    //调用funs文件里的方法
    $res = getNum(4,5);
    echo &quot;use fun res is &quot;.$res; 
?&gt;
</code></pre>

<h3>（3）.使用include引入和使用require引入</h3>
<pre><code>&lt;?php

//require &quot;refun.php&quot;;
//require_once &quot;refun.php&quot;;//当引入了，则不再引入
//require &quot;refun.php&quot;;//写完了require_one 这样写了也会把文件引入

/*
    这样写就相当于把文件里的所有方法copy了两遍，导致方法名一样。会报错
    */
//require 'funs.php';
//require &quot;refun.php&quot;;


include &quot;refun.php&quot;;
include_once &quot;refun.php&quot;;
include &quot;refun.php&quot;;
?&gt;
</code></pre>

<h3>（4）.include 如果出现错误，会继续执行。require出现错误，则会报错，不执行</h3>
<hr/>
<h3>函数名不区分大小写、变量区分大小写</h3>
<hr/>
<h3>使用global可以使用外部的变量</h3>
<pre><code>//global可以使用外部的变量
$a=12;
function add(){
    global $a;
    $a=$a+3;
}
add();
echo $a;
</code></pre>

<hr/>
<h3>unset($a);//删除一个定义了的变量</h3>
<hr/>
<h3>方法默认值的定义</h3>
<pre><code>//方法默认值的定义
function defaule($a,$b=10){
    $sum = $a + $b;
    return $sum;
}
echo &quot;一个参数&quot;.defaule(20).&quot;&lt;br/&gt;&quot;;    //第二个参数使用默认值
echo &quot;两个参数&quot;.defaule(30,20).&quot;&lt;br/&gt;&quot;; //给了第二个参数，则冲掉了默认值
</code></pre>

<hr/>
<h3>数组</h3>
<pre><code>//数组的定义
$arr[&quot;h1&quot;]=&quot;hello&quot;;
$arr[&quot;h2&quot;]=&quot;php&quot;;

//这样可以把 key值 和 value值 打印出
foreach($arr as $key=&gt;$val){
    echo $key.&quot;=&quot;.$val.&quot;&lt;br/&gt;&quot;;
}
</code></pre>

<h3>下标的多少与数组大小无关</h3>
<pre><code>//下标的多少与数组大小无关
$arr2[0]=1;
$arr2[6]=2;

echo count($arr2);//2
</code></pre>

<h3>如果创建的数组没有给下标，则默认会用目前最大的下标加一来作为该元素的下标</h3>
<pre><code>//这样ip的小标就会从以0为下标开始
$arr3=array(&quot;h3&quot;=&gt;&quot;hello&quot;,&quot;ip&quot;,12345);
//echo count($arr3);
foreach($arr3 as $key=&gt;$val){
    echo $key.&quot;=&quot;.$val.&quot;&lt;br/&gt;&quot;;
}

//这样address的下标就会从以6为下标开始
$arr4=array(5=&gt;&quot;hello&quot;,&quot;address&quot;,&quot;hi&quot;);
foreach($arr4 as $key=&gt;$val){
    echo $key.&quot;=&quot;.$val.&quot;&lt;br/&gt;&quot;;
}

//更详细地输出数组信息
print_r($arr4);
echo &quot;&lt;br/&gt;&quot;;
var_dump($arr4);
</code></pre>

<h3>分割</h3>
<pre><code>//字符串分割
echo &quot;&lt;br/&gt;&quot;;
$arr5=&quot;北京 广州 上海&quot;;
$item=explode(&quot; &quot;,$arr5);//按“ ”分割，返回一个数组
print_r($item);

//遍历值
foreach($item as $val){
    echo $val;
}
</code></pre>

<h3>冒泡法</h3>
<pre><code>//冒泡法排序
$temp=0;
$nums=array(1,-1,5,2);
for($i=0;$i&lt;count($nums)-1;++$i){
    for($j=0;$j&lt;count($nums)-1-$i;++$j){
        if($nums[$j]&gt;$nums[$j+1]){
            $temp=$nums[$j];
            $nums[$j]=$nums[$j+1];
            $nums[$j+1]=$temp;
        }
    }

}
print_r($nums);
</code></pre>

<h3>选择排序</h3>
<h3>网页输入，php程序获取</h3>
<pre><code>&lt;h1&gt;请输入成绩，以空格隔开&lt;/h1&gt;
&lt;form action=&quot;receive.php&quot; method=&quot;post&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;grades&quot;/&gt;
&lt;input type=&quot;submit&quot; value=&quot;提交&quot;/&gt;
&lt;/form&gt; 

//接收提交过来的数据
$grades=$_REQUEST['grades'];
$arritem = explode(&quot; &quot;,$grades);
foreach($arritem as $val){
    echo $val.&quot;&lt;br/&gt;&quot;;
}
//echo $grades;
</code></pre>

<hr/>
<h3>类</h3>
<pre><code>class person{
    public $name;
}

//调用
$p = new person();
$p -&gt; name = &quot;aa&quot;;
</code></pre>

<h3>给一个函数传对象的时候传的是地址</h3>
<pre><code>class person{
    public $name;
}

function test1($obj){
    $obj-&gt;name=&quot;bb&quot;;
    //test2($obj);
}

function test2($obj2){
    $obj2-&gt;name=&quot;cc&quot;;
}

$p = new person();
$p -&gt; name = &quot;aa&quot;;
//对象的调用传的是地址
test1($p);  //bb
echo $p-&gt;name;
</code></pre>

<h3>引进一个php文件，里面有个类</h3>
<pre><code>//引进一个php文件，里面有个类
require &quot;class_method.php&quot;;

$p = new person();
echo &quot;引进输出是：&quot;.&quot;&lt;br/&gt;&quot;;
$p-&gt;say();
</code></pre>

<hr/>
<h3>构造函数</h3>
<pre><code>&lt;?php

    class person{

        public function __construct(){
            echo &quot;这是构造函数&quot;;
        }
    }

    $p = new person();
?&gt;
</code></pre>

<h3>带参的构造函数</h3>
<pre><code>&lt;?php

    class person{

        public $name;
        public $age;

        /*
        public function __construct(){
            echo &quot;这是无参的构造函数&quot;;
        }*/

        public function __construct($myname,$myage){

            $this-&gt;name=$myname;
            $this-&gt;age=$myage;
        }
    }

    //$p = new person(&quot;小米&quot;,20);
    //echo &quot;&lt;br/&gt;构造函数是：&quot;.$p-&gt;name;
?&gt;
</code></pre>

<h3>php只能有一个构造方法，不管有无有参</h3>
<hr/>
<h3>析构函数：当对象成为垃圾对象的时候调用，主要用于释放资源</h3>
<pre><code>class person{

    public $name;

    public function __construct($name){
        $this-&gt;name=$name;
    }

    //析构函数,如果不写，对象成为垃圾的时候是不会自动调用的
    public function __destruct(){
        echo $this-&gt;name.&quot;销毁了&quot;;
    }
}

$p = new person(&quot;小米&quot;);
</code></pre>

<hr/>
<h3>静态变量static</h3>
<pre><code>&lt;?php

    class person{
        public static $a=5;

        public function __construct(){
            //这样也可以访问到静态变量
            self::$a+=2;
        }
    }

    $p = new person();
    //echo &quot;静态变量值是：&quot;.person::$a;
    echo &quot;静态变量值是：&quot;.$p::$a.&quot;&lt;br/&gt;&quot;;//这样也可以访问到静态变量
    $p2 = new person();
    echo &quot;静态变量值是：&quot;.$p2::$a;//这样也可以访问到静态变量
?&gt;
</code></pre>

<hr/>
<h3>静态方法</h3>
<pre><code>class person{

    public static function say(){
        echo &quot;hello&quot;;
    }
}

$p = new person();
//访问方式1
$p-&gt;say();
//访问方式2
person::say();
</code></pre>

<hr/>
<h3>继承，只能继承public类型的，protect和private都不可以继承</h3>
<pre><code>&lt;?php

    class person{

        public $name;

        public function __construct($name){
            $this-&gt;name=$name;
        }

        public function say(){
            echo &quot;my name is :&quot;.$this-&gt;name;
        }
    }

    //$p = new person(&quot;aa&quot;);
    //$p-&gt;say();
    //继承person类
    class child extends person{

    }

    $c=new child(&quot;bb&quot;);
    $c-&gt;say();
    //也可以这样访问父类的方法
    $c::say();
?&gt;
</code></pre>

<h3>继承代码2</h3>
<pre><code>&lt;?php

    //父类
    class person{
        private function say(){
            echo &quot;say&quot;;
        }

        public function speak(){
            echo &quot;speak&quot;;
        }
    }

    //子类
    class child extends person{

        public function test(){
            //调用父类的方法
            parent::speak();
        }
    }

    $c = new child();
    //调用父类的方法
    $c-&gt;speak();
    $c::speak();
    //调用自己的方法
    $c-&gt;test();
?&gt;
</code></pre>

<h3>实例化子类时，默认不会调用父类的构造方法</h3>
<h3>php重载很麻烦，建议理解</h3>
<h3>php重写（必须继承才可以重写，重写写方法的内容）可以，但不支持重载（方法名相同，参数个数不同）</h3>
<hr/>
<h3>继承和重写</h3>
<pre><code>&lt;?php

    //父类
    class person{
        public function say(){
            echo &quot;say&quot;;
        }

        public function speak(){
            echo &quot;speak&quot;;
        }
    }

    //子类
    class child extends person{

        public function test(){
            //调用父类的方法
            parent::speak();
        }

        //重写好像可以写上参数
        public function say($a){
            echo &quot;say1&quot;;
        }
    }

    $c = new child();
    //调用父类的方法
    $c-&gt;speak();
    $c::speak();
    //调用自己的方法
    $c-&gt;test();
    //重写好像可以写上参数
    $c::say(2);
?&gt;
</code></pre>

<h3>继承了一个抽象类，必须要重写其的方法</h3>
<pre><code>&lt;?php   

    abstract class person{

        public function test(){
        }

        abstract public function atest();
    }


    class child extends person{
        //继承一个抽象类，必须要实现（重写）其的抽象方法
        public function atest(){
        }
    }

?&gt;
</code></pre>

<hr/>
<h3>接口</h3>
<pre><code>//定义一个接口
interface iusb{
    public function test();
    public function uTest();
}

//实现接口
class phone implements iusb{
    public function test(){
        echo &quot;phone&lt;br/&gt;&quot;;
    }

    public function uTest(){
        echo &quot;phone ut&quot;;
    }
}

$p = new phone();
$p-&gt;test();
$p-&gt;uTest();
</code></pre>

<h3>接口里面可以定义常量，使用接口名：：常量名</h3>
<pre><code>//定义一个接口
interface iusb{
    public function test();
    public function uTest();
    const A=100;
}

//实现接口
class phone implements iusb{
    public function test(){
        echo &quot;phone&lt;br/&gt;&quot;;
    }

    public function uTest(){
        echo &quot;phone ut&quot;;
    }
}

$p = new phone();
$p-&gt;test();
$p-&gt;uTest();
echo &quot;接口常量是：&quot;.iusb::A;
</code></pre>

<hr/>
<h3>final方法可以被继承，但是不可以被覆盖；final类不可以被继承</h3>
<h3>常量：consr a=10; 常量不用加$符。访问方式：类名：：常量 或  接口名：：常量。常量在定义的时候必须给初值。在本类里面也可以通过    self：：常量名访问</h3>
<hr/>
<h3>文件的打开和判断是否存在</h3>
<pre><code>&lt;?php

    //判读文件是否存在（存在返回true）
    if(!file_exists(&quot;interface.php&quot;)){
        echo &quot;文件找不到&quot;;
    }else{
        //打开文件，打开方式是只读
        fopen(&quot;interface.php&quot;,&quot;r&quot;);
        echo &quot;文件打开成功&quot;;
    }

    //如果文件存在，会执行ok；如果不存在，会执行die里面的代码且退出 die  等同于exit（）

    file_exists(&quot;interface1.php&quot;) or die(&quot;die文件不存在&quot;);
    echo &quot;ok&quot;;
?&gt;
</code></pre>

<hr/>
<h3>自定义错误处理</h3>
<pre><code>&lt;?php

    /**
    **
    **  自定义错误处理
    **/

    //1。自定义错误处理函数
     function my_err(){
        echo &quot;错误了&quot;;
    }

    //2。改写set_error_handler处理器
    set_error_handler(&quot;my_err&quot;,E_WARNING);

    //出错
    $fp=fopen(&quot;aa.txt&quot;,&quot;r&quot;);

?&gt;
</code></pre>

<h3>trigger触发错误</h3>
<pre><code>&lt;?php

    function myerr1($errnum,$errmsg){
        echo &quot;错误了&quot;;
        //exit();
    }

    function myerr2($errnum,$errmsg){
        echo &quot;出大事了&quot;;
        exit();
    }

    //改写  
    //set_error_handler(&quot;myerr1&quot;,E_USER_ERROR);改写2条会报错
    set_error_handler(&quot;myerr1&quot;,E_USER_WARNING);


    //程序触发
    $age=700;
    if($age&gt;123){
        trigger_error(&quot;数据库的好事&quot;,E_USER_WARNING);
        //exit();

    }

    echo &quot;继续运行&quot;;

?&gt;
</code></pre>

<hr/>
<h3>错误日志</h3>
<pre><code>&lt;?php

    //设置时区
    date_default_timezone_set(&quot;Asia/Hong_Kong&quot;);


    function my_err($errnum,$errmsg){
        //设置时间
        $date =date(&quot;Y-n-d H:i:s&quot;);
        $txt=&quot;文件打开失败&quot;.$date;
        echo $txt;
        //把日志写到本地去
        error_log($txt.&quot;\r\n&quot;,3,&quot;myerr.txt&quot;);
        exit();
    }

    set_error_handler(&quot;my_err&quot;,E_WARNING);

    $p=fopen(&quot;aa.txt&quot;);

?&gt;
</code></pre>

<hr/>
<h3>异常处理</h3>
<pre><code>&lt;?php

    //捕获异常try catch
    try{
        add(&quot;system1&quot;);
        update(&quot;system&quot;);
        echo &quot;&lt;h1&gt;success&lt;/h1&gt;&quot;;
    }catch(Exception $e){
        echo &quot;错误信息：&quot;.$e-&gt;getMessage();   
        //获得错误的行号
        echo &quot;错误行：&quot;.$e-&gt;getLine();   
    }

    /*
    *   下面这两个方法，会有异常抛出
    */
    function add($userName){
        if($userName == &quot;system&quot;){
            //echo &quot;add&quot;;
        }else{
            //抛出异常
            throw new Exception(&quot;添加失败&quot;);    
        }
    }

    function update($userName){
        if($userName == &quot;system&quot;){

        }else{
            //抛出异常
            throw new Exception(&quot;修改失败&quot;);    
        }
    }
?&gt;
</code></pre>

<h3>顶级捕获</h3>
<pre><code>&lt;?php

    /*
    *   定义顶级捕获函数
    */
    function top_exception($e){
        echo &quot;我是顶级捕获了,错误信息是：&quot;.$e-&gt;getMessage();
    }

    set_exception_handler(&quot;top_exception&quot;);

    function input($num){
        if($num &gt; 100){
            throw new exception(&quot;输入过大&quot;);
        }else{

        }
    }

    try{
        input(200);
    }catch(exception $e){
        throw $e;
    }

?&gt;
</code></pre>

<hr/>
<h3>http知识</h3>
<pre><code>//这样可以得到http的详细情况
foreach($_SERVER as $key=&gt;$val){
    echo &quot;$key=$val&quot;.&quot;&lt;br/&gt;&quot;;
}

//跳转到另一个页面
header(&quot;Location:hello.php&quot;);

//获取Referer，可以做防盗链
$referer = $_SERVER[&quot;HTTP_REFERER&quot;];
echo &quot;本页面来自于：&quot;.$referer;
</code></pre>

<h3>防盗链案例</h3>
<pre><code>/*
*   防盗链案例
*/

    //获取Referer，可以做防盗链
$referer = $_SERVER[&quot;HTTP_REFERER&quot;];
echo &quot;本页面来自于：&quot;.$referer;

//判断Referer是否为空
if( isset($referer ) ){
    //在第一个参里找第二个参数出现的位置
    if(strpos($referer,&quot;http://localhost/pro_5/&quot;) == 0){
        echo &quot;进啦了&quot;;
    }else{
        header(&quot;Location:hello.php&quot;);
    }
}else{
    header(&quot;Location:hello.php&quot;);
}
</code></pre>

<hr/>
<h3>定时刷新</h3>
<pre><code>&lt;?php

    echo &quot;3秒后刷新&lt;br/&gt;&quot;;
    //会在当前页面一直刷新
    header(&quot;Refresh:3&quot;);

    //刷新后跳转到另一个页面
    header(&quot;Refresh:4;url=http://www.baidu.com&quot;);

?&gt;
</code></pre>

<HR/>
<h3>下载</h3>
<h4>①。</h4>
<pre><code>&lt;?php

    //下载文件的名
    $fileName = &quot;boom_1.gif&quot;;

    //判断文件是否存在
    if(!file_exists($fileName)){
        echo &quot;文件不存在&quot;;
        return ;
    }

    //打开文件
    $fp=fopen($fileName,&quot;r&quot;);
    //获取文件的大小
    $file_size=filesize($fileName);


    /*
    *   下载文件的协议
    */

    header(&quot;Content-type:application/octet-stream&quot;);
    header(&quot;Accept-Ranges:bytes&quot;);
    header(&quot;Accept-Length:$fileSize&quot;);
    header(&quot;Content-Disposition:attachment;filename=$fileName&quot;);

    /*
    *   向客户端返回数据
    */

    $buff = 1024;
    while(!feof($fp)){
        $data = fread($fp,$buff);
        echo $data;
    }

    fclose($fp);


?&gt;
</code></pre>

<h3>header(&quot;Content-Type:text/html; charset='utf-8'&quot;);可以解决html里中文乱码的问题</h3>
<pre><code>&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
</code></pre>

<h3>②。解决中文和绝对路径</h3>
<pre><code>&lt;?php


    //下载中文名的文件
    $fileName=&quot;123.png&quot;;
    //把中文转下码
    $fileName=iconv(&quot;utf-8&quot;,&quot;gb2312&quot;,$fileName);

    //绝对路径
    $filePath=$_SERVER['DOCUMENT_ROOT'].&quot;/pro_5/dowm/&quot;.$fileName; 



    //判断文件是否存在
    if(!file_exists($filePath)){
        echo &quot;文件不存在 &quot;.$filePath;
        return ;
    }

    //打开文件
    $fp=fopen($filePath,&quot;r&quot;);
    //获取文件的大小
    $file_size=filesize($filePath);


    /*
    *   下载文件的协议
    */

    header(&quot;Content-type:application/octet-stream&quot;);
    header(&quot;Accept-Ranges:bytes&quot;);
    header(&quot;Accept-Length:&quot;.$file_size);
    header(&quot;Content-Disposition:attachment;filename=$fileName&quot;);

    /*
    *   向客户端返回数据
    */

    //读取的字节大小
    $buff = 1024;
    //统计一共读了多少
    $count=0;
    while(!feof($fp) &amp;&amp; ($file_size-$count) &gt; 0){
        $count+=$buff;
        $data = fread($fp,$buff);
        echo $data;
    }

    fclose($fp);


?&gt;
</code></pre>

<h3>③。封装成函数</h3>
<pre><code>&lt;?php

    function down($fileName,$filePath){

        //把中文转下码
        $fileName=iconv(&quot;utf-8&quot;,&quot;gb2312&quot;,$fileName);

        //绝对路径
        $filePath=$_SERVER['DOCUMENT_ROOT'].$filePath.&quot;/&quot;.$fileName; 


        //判断文件是否存在
        if(!file_exists($filePath)){
            echo &quot;文件不存在 &quot;.$filePath;
            return ;
        }

        //打开文件
        $fp=fopen($filePath,&quot;r&quot;);
        //获取文件的大小
        $file_size=filesize($filePath);


        /*
        *   下载文件的协议
        */

        header(&quot;Content-type:application/octet-stream&quot;);
        header(&quot;Accept-Ranges:bytes&quot;);
        header(&quot;Accept-Length:&quot;.$file_size);
        header(&quot;Content-Disposition:attachment;filename=$fileName&quot;);


        /*
        *   向客户端返回数据
        */

        //读取的字节大小
        $buff = 1024;
        //统计一共读了多少
        $count=0;
        while(!feof($fp) &amp;&amp; ($file_size-$count) &gt; 0){
            $count+=$buff;
            $data = fread($fp,$buff);
            echo $data;
        }

        fclose($fp);
    }


    down(&quot;坦克.png&quot;,&quot;/pro_5/dowm&quot;);

?&gt;
</code></pre>

<hr/>
<h3>数据库编程</h3>
<hr/>
<h3>如果中文加不进数据库里，可以这样做</h3>
<pre><code> set character_set_client=gbk;
set  character_set_results=gbk;
//查看字符集的情况
 show variables like '%char%';
</code></pre>

<h3>C:\WINDOWS\system32\drivers\etc是这个么？里面有个host用记事本打开。</h3>
<hr/>
<h3>连接数据库查询案例</h3>
<pre><code>&lt;?php
    header(&quot;Content-Type:text/html; charset='utf-8'&quot;);
    //连接数据库
    $conn = mysql_connect(&quot;127.0.0.1&quot;,&quot;root&quot;,&quot;123&quot;);
    if(!$conn){
        die(&quot;连接失败&quot;.mysql_error());
    }

    //使用数据库
    if(!mysql_select_db(&quot;php&quot;,$conn)){
        die(&quot;数据库不存在&quot;);
    }

    //发送sql语句且获得结果资源
    $sql = &quot;select * from user1&quot;;
    $res = mysql_query($sql,$conn);

    //遍历返回
    while($row = mysql_fetch_row($res) ){
        //echo &quot;$row[0]--$row[1]--$row[2]&lt;br/&gt;&quot;;
        foreach($row as $val){
            echo &quot;--$val&quot;;
        }
        echo &quot;&lt;br/&gt;&quot;;
    }

    //释放内存中的结果    
    mysql_free_result($res);

?&gt;
</code></pre>

<h3>数据库的crud</h3>
<pre><code>&lt;?php
    header(&quot;Content-Type:text/html; charset='utf-8'&quot;);
    //打开一个数据库连接
    $conn = mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;123&quot;);
    if(!$conn){
        die(&quot;数据库连接失败&quot;);
    }

    //使用数据库
    if(!mysql_select_db(&quot;php&quot;,$conn)){
        die(&quot;数据库不存在&quot;);
    }

    /*
    *   写sql语句
    */
    //增加
    //$sql = &quot;insert into user1 values(null,'小李',md5('54321'),18)&quot;;

    //删除
    //$sql = &quot;delete from user1 where name = '小李' &quot;;

    //修改
    $sql = &quot;update user1 set name ='小明' where id=8 &quot;;

    //返回boolean值，因为不是查询
    $res = mysql_query($sql,$conn);
    if(!$res){
        die(&quot;操作失败&quot;.mysql_error($conn));
    }

    //统计受影响的数量
    $count = mysql_affected_rows($conn);
    if($count&gt;0){
        echo &quot;操作成功&quot;;
    }else{
        die(&quot;操作没有变化&quot;);
    }

?&gt;
</code></pre>

<h3>解决查看数据库时的中文乱码</h3>
<pre><code>set names gbk
</code></pre>

<h3>清空表且把自动增长的值删除</h3>
<pre><code>TRUNCATE TABLE temp;
</code></pre>

<h3>把crud查找封装成函数</h3>
<pre><code>&lt;?php

    class sqlTool{
        private $conn;
        private $host=&quot;localhost&quot;;
        private $user=&quot;root&quot;;
        private $password=&quot;123&quot;;

        //构造方法
        public function __construct(){
            //打开数据库连接
            $this-&gt;conn = mysql_connect($this-&gt;host,$this-&gt;user,$this-&gt;password) or die(&quot;连接失败&quot;.mysql_error());

            //选择数据库
            mysql_select_db(&quot;php&quot;,$this-&gt;conn) or die(&quot;没有此数据库&quot;);
        }

        function dml($sql){
        //执行sql语句
        $res = mysql_query($sql,$this-&gt;conn) or die(&quot;操作失败&quot;.mysql_error());
        //统计受影响的行
        $count = mysql_affected_rows($this-&gt;conn);
        if($count &gt; 0){
            echo &quot;操作成功&quot;;
        }else{
            echo &quot;操作没有变化&quot;;
        }

    }

        function dql($sql){
        $res = mysql_query($sql,$this-&gt;conn) or die(&quot;操作失败&quot;.mysql_error());
        return $res;
        }

    }

?&gt;
</code></pre>

<h3>数据库其他一些方法</h3>
<pre><code>&lt;?php

    //打开数据库连接
    $conn = mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;123&quot;);

    //选择数据库
    mysql_select_db(&quot;php&quot;,$conn) or die(&quot;数据库不存在&quot;);

    //执行sql语句
    $sql =&quot;select * from user1&quot;;
    $res = mysql_query($sql,$conn);

    //获得行数
    $row = mysql_affected_rows($conn);

    //获得列
    $col = mysql_num_fields($res);

    //获取结果集指定的字段名
    for($i=0;$i&lt;$col;++$i){
        $content = mysql_field_name($res,$i);
        echo &quot;字段名是：&quot;.$content.&quot;&lt;br/&gt;&quot;;
    }

    echo &quot;行：&quot;.$row.&quot;&lt;br/&gt;&quot;.&quot;列：&quot;.$col;
?&gt;
</code></pre>

<hr/>
<h3>mysqli</h3>
<pre><code>&lt;?php

    //创建数据库连接
    $mysqli = new MySQLi(&quot;localhost&quot;,&quot;root&quot;,&quot;123&quot;,&quot;php&quot;);

    //如果连接不成功为true，成功则为false
    if($mysqli-&gt;connect_error){
        die(&quot;连接失败&quot;);
    }

    //执行sql语句
    $sql = &quot;select * from user1&quot;;
    $res = $mysqli-&gt;query($sql);


    //解析结果
    while($rows = $res-&gt;fetch_row()){
        foreach($rows as $val){
            echo &quot;--$val&quot;;
        }
        echo &quot;&lt;br/&gt;&quot;;
    } 
?&gt; 
</code></pre>

<h3>mysqli 的批量dml执行</h3>
<pre><code>&lt;?php


    $mysqli = new mysqli(&quot;localhost&quot;,&quot;root&quot;,&quot;123&quot;,&quot;php&quot;);

    //准备好一些sql语句
    $sqls=&quot;insert into user1 values(null,'a1',md5('1234'),16);&quot;;
    $sqls.=&quot;insert into user1 values(null,'a2',md5('12347'),14);&quot;;
    $sqls.=&quot;insert into user1 values(null,'a4',md5('12346'),11);&quot;;

    //开始批量执行
    $mysqli-&gt;multi_query($sqls) or die(&quot;批量执行失败&quot;.$mysqli-&gt;error);
    echo &quot;批量执行成功&quot;;
?&gt;
</code></pre>

<h3>的批量dql执行</h3>
<pre><code>&lt;?php

    $mysqli = new mysqli(&quot;localhost&quot;,&quot;root&quot;,&quot;123&quot;,&quot;php&quot;);

    if($mysqli-&gt;connect_error){
        die(&quot;连接失败&quot;.$mysqli-&gt;connect_error);
    }

    //sql语句
    $sqls=&quot;select * from user1;&quot;;
    $sqls.=&quot;select * from words;&quot;;

    //批量执行,返回boolean值
    $bool = $mysqli-&gt;multi_query($sqls);

    if($bool){

        //遍历批量执行后的结果
        do{

            //获取表的资源
            if($res = $mysqli-&gt;store_result()){
                //遍历表
                while($rows = $res-&gt;fetch_row()){
                    foreach($rows as $val){
                        echo &quot;--$val&quot;;
                    }
                    echo &quot;&lt;br/&gt;&quot;;
                }
                //遍历完了就释放资源
                $res-&gt;free();

                //判断接下来还有没有资源
                if($mysqli-&gt;more_results()){
                    echo &quot;***************************************&lt;br/&gt;&quot;;
                }else{
                    break;
                }
            }

        }while($mysqli-&gt;next_result());//把指针移到下一处
    }
?&gt;
</code></pre>

<h3>回滚</h3>
<pre><code>&lt;?php

    $mysqli = new mysqli(&quot;localhost&quot;,&quot;root&quot;,&quot;123&quot;,&quot;php&quot;);
    if($mysqli-&gt;connect_error){
        die(&quot;连接失败&quot;.$mysqli-&gt;connect_error);
    }

    $mysqli-&gt;autocommit(false);

    $sql_1 = &quot;update accont set money=money-10 where name='aa'&quot;;
    $sql_2 = &quot;update accont set money=money+10 where name='bb'&quot;;

    $boo1 = $mysqli-&gt;query($sql_1);
    $boo2 = $mysqli-&gt;query($sql_2);

    if(!$boo1 || !$boo2){
        $mysqli-&gt;rollback();
        die(&quot;执行失败，回滚&quot;.$mysqli-&gt;error);
        //echo &quot;执行失败，回滚&quot;.$mysqli-&gt;error;
    }else{
        $mysqli-&gt;commit();
        $mysqli-&gt;close();
        die(&quot;执行成功&quot;);
    }

?&gt;
</code></pre>

<h3>预处理</h3>
<pre><code>&lt;?php

    $mysqli = new Mysqli(&quot;localhost&quot;,&quot;root&quot;,&quot;123&quot;,&quot;php&quot;);
    if($mysqli-&gt;connect_error){
        die(&quot;连接数据库失败&quot;.$mysqli-&gt;connect_error);
    }

    //创建预处理对象
    $sql = &quot;insert into accont(name,money) values(?,?)&quot;;
    $mysqli_stmt = $mysqli-&gt;prepare($sql);

    //绑定参数
    $name=&quot;ee&quot;;
    $money=&quot;200.5&quot;;
    $mysqli_stmt-&gt;bind_param('sd',$name,$money);

    //执行
    $bool = $mysqli_stmt-&gt;execute();
    if(!$bool){
        die(&quot;执行失败&quot;.$mysqli_stmt-&gt;error);
    }
    echo &quot;操作成功&quot;;
?&gt;
</code></pre>

<h3>dql预处理</h3>
<pre><code>&lt;?php

    $mysqli = new mysqli(&quot;localhost&quot;,&quot;root&quot;,&quot;123&quot;,&quot;php&quot;);
    if($mysqli-&gt;connect_error){
        die(&quot;连接数据库失败&quot;.$mysqli-&gt;connect_error);
    }

    //创建预编译对象
    $id=2;
    $sql = &quot;select * from accont where id&gt;?&quot;;
    $sqli_stmt = $mysqli-&gt;prepare($sql);

    //绑定参数
    $sqli_stmt-&gt;bind_param(&quot;i&quot;,$id);
    //绑定结果
    $sqli_stmt-&gt;bind_result($id,$name,$money);

    //执行
    $bool = $sqli_stmt-&gt;execute();

    if(!$bool){
        die(&quot;执行失败&quot;.$sqli_stmt-&gt;error);
    }

    //取出结果
    while($sqli_stmt-&gt;fetch()){
        echo &quot;--$id,$name,$money&lt;br/&gt;&quot;;
    }

    //关闭预编译和连接
    $sqli_stmt-&gt;free_result();
    $sqli_stmt-&gt;close();

?&gt;
</code></pre>

<h3>超全局变量</h3>
<h3>①。$_GET</h3>
<pre><code>&lt;html&gt;
&lt;a href=&quot;test1.php?name=xiaoming&amp;city=beijing&quot;&gt;test&lt;/a&gt;
&lt;/html&gt;
</code></pre>

<h2></h2>
<pre><code>//另一个页面获取
&lt;?php

    print_r($_GET);

    //获取传过来的name值
    echo $_GET['name'];
?&gt;
</code></pre>

<h3>②。$_POST</h3>
<p>&lt; html&gt;
&lt; body&gt;
	&lt; form action=&quot;post.php&quot; method=&quot;post&quot;&gt;
		姓名：&lt; input type=&quot;text&quot; name=&quot;username&quot;/&gt;
		密码：&lt; input type=&quot;password&quot; name=&quot;pwd&quot;/&gt;<p/>
		性别：&lt; input type=&quot;radio&quot; name=&quot;sex&quot; value=&quot;man&quot;/&gt;男
			  &lt; input type=&quot;radio&quot; name=&quot;sex&quot; value=&quot;woman&quot;/&gt;女
		<p/>
		&lt; !--这里的 name 一定要在后面加上【】，否则不能以数组的形式获取-- &gt;<br/>
		&lt;  input type=&quot;checkbox&quot; name=&quot;hibby[]&quot; value=&quot;game&quot;/&gt;打游戏<br/>
		&lt; input type=&quot;checkbox&quot; name=&quot;hibby[]&quot; value=&quot;swimming&quot;/&gt;游泳<br/>
		&lt; input type=&quot;checkbox&quot; name=&quot;hibby[]&quot; value=&quot;run&quot;/&gt;跑步<br/>
		&lt; input type=&quot;checkbox&quot; name=&quot;hibby[]&quot; value=&quot;read&quot;/&gt;阅读<br/>
		<p/>
		&lt; select name=&quot;city&quot;&gt;
			&lt; option value=&quot;nanjing&quot;&gt;南京</option><br/>
			&lt; option value=&quot;beijing&quot;&gt;北京</option><br/>
			&lt; option value=&quot;guangzhou&quot;&gt;广州</option><br/>
		&lt; /select&gt;
		<p/>
		个人介绍<br/>
		&lt; textarea rows=&quot;10&quot; cols=&quot;30&quot; name=&quot;jianli&quot;&gt;</textarea><br/>
		<p/>
		选择图片<br/>
		&lt; input type=&quot;file&quot; name=&quot;photo&quot;/&gt;<br/>
		<p/>&lt; input type=&quot;submit&quot; value=&quot;提交&quot;/&gt;<br/></p>
<p>&lt;/form &gt;
&lt;/body &gt;
&lt;/html &gt;</p>
<h2></h2>
<pre><code>&lt;?php

    print_r($_POST);
    echo &quot;姓名：&quot;.$_POST[&quot;username&quot;].&quot;&lt;br/&gt;&quot;;
    echo &quot;密码：&quot;.$_POST[&quot;pwd&quot;].&quot;&lt;br/&gt;&quot;;
    echo &quot;性别：&quot;.$_POST[&quot;sex&quot;].&quot;&lt;br/&gt;&quot;;

    //爱好
    foreach($_POST[&quot;hibby&quot;] as $key){
        echo $key.&quot;&lt;br/&gt;&quot;;
    }
?&gt;
</code></pre>

<hr/>
<h3>获取用户提交方式：$<em>SERVER['RREQUEST</em>_METHOD']</h3>
<hr/>
<h3>$<em>REQUEST:用法和$</em>GET一样，这个超全局变量还可以包含了$<em>POST和$</em>COOKIE</h3>
<hr/>
<h3>$_SERVER,可以获取客户端 和 服务端的 信息和内容</h3>
<pre><code>&lt;?php 

    echo &quot;&lt;pre&gt;&quot;;
    print_r($_SERVER);
    echo &quot;&lt;/pre&gt;&quot;;

?&gt;
</code></pre>

<hr/>
<h3>empty():如果是空，返回true</h3>
<hr/>
<h3>cookie</h3>
<h4>1。写入cookie</h4>
<pre><code>&lt;?php

    setcookie(&quot;name&quot;,&quot;chen&quot;,time()+500) or die(&quot;写入cookie失败&quot;) ;
    echo &quot;写入cookie成功&quot;;

?&gt;
</code></pre>

<h4>2。读cookie</h4>
<pre><code>&lt;?php

    print_r($_COOKIE);
    echo $_COOKIE[&quot;name&quot;];

?&gt;
</code></pre>

<h3>3。删除cookie</h3>
<pre><code>&lt;?php

    foreach($_COOKIE as $key=&gt;$val){
        setcookie($key,&quot;&quot;,time()-100) or die(&quot;删除cookie失败&quot;);
    }

    echo &quot;删除全部cookie成功&quot;;

?&gt;
</code></pre>

<hr/>
<h3>session</h3>
<h3>1。创建session</h3>
<pre><code>&lt;?php

    //类
    class person{
        private $name;
        private $age;

        function __construct($name,$age){
            $this-&gt;name=$name;
            $this-&gt;age=$age;
        }

        function say(){
            echo &quot;ok&quot;;
        }
    }

    session_start();
    $_SESSION[&quot;name&quot;]=&quot;john&quot;;
    $_SESSION[&quot;password&quot;]=123;
    $_SESSION[&quot;obj&quot;]=new person(&quot;sys&quot;,12);
    echo &quot;创建session成功&quot;;


?&gt;
</code></pre>

<h3>2。取出session</h3>
<pre><code>&lt;?php

    require_once &quot;person.php&quot;;

    session_start();

    echo &quot;&lt;pre&gt;&quot;;
    echo $_SESSION[&quot;password&quot;].&quot;&lt;br/&gt;&quot;;
    print_r($_SESSION);
    echo &quot;&lt;/pre&gt;&quot;;

    //取出对象。取出对象必须要把那个对象引入进来
    $person = $_SESSION[&quot;obj&quot;];
    $person-&gt;say();
?&gt;
</code></pre>

<h3>3。删除session</h3>
<pre><code>&lt;?php

    session_start() or die(&quot;失败&quot;);
    unset($_SESSION[&quot;name&quot;]);
    echo &quot;删除session成功&quot;;

    //删除所有session数据
    session_destroy();
    echo &quot;删除所有session数据成功&quot;;
?&gt;
</code></pre>

<hr/>
<h3>禁用cookie处理</h3>
<h3>一些方法</h3>
<h3>1。获取sessionId</h3>
<pre><code>$id = session_id();
</code></pre>

<h3>2。设置指定的sessionId</h3>
<pre><code>session_id(String);
</code></pre>

<hr/>
<h3>文件编程</h3>
<h3>1。文件的打开、获取大小</h3>
<pre><code>&lt;?php

    $fileName = &quot;hello.txt&quot;;
    //$fileName = &quot;http://www.systemchen.cn/note/php.html&quot;;
    $f = fopen($fileName,&quot;r&quot;);

    //当文件打开成功就会返回true，否则是false
    if($f){
        /*
            返回此文件的状态
        */
        echo &quot;ok&quot;;
        echo &quot;&lt;pre&gt;&quot;;
        print_r(fstat($f));
        echo &quot;&lt;/pre&gt;&quot;;

        //函数得到文件的大小
        echo filesize(&quot;hello.txt&quot;);
    }else{
        echo &quot;err&quot;;
    }

?&gt;
</code></pre>

<h3>2。文件的读取</h3>
<pre><code>&lt;?php

    $file_path=&quot;hello.txt&quot;;
    //判断文件是否存在
    if(file_exists){
        $f = fopen($file_path,&quot;a+&quot;);
        //读取文件
        $conn = fread($f,filesize($file_path));
        //将/r/n替换成br
        $conn = str_replace(&quot;\r\n&quot;,&quot;&lt;br/&gt;&quot;,$conn);
        echo $conn;
    }

?&gt;
</code></pre>

<hr/>
<pre><code>&lt;?php

    $file_path=&quot;hello.txt&quot;;
    //判断文件是否存在
    if(file_exists){
        //$f = fopen($file_path,&quot;a+&quot;);
        //读取文件
        $conn = file_get_contents($file_path);
        $conn = str_replace(&quot;\r\n&quot;,&quot;&lt;br/&gt;&quot;,$conn);
        echo $conn;
    }

?&gt;
</code></pre>

<hr/>
<pre><code>&lt;?php

    $file_path=&quot;hello.txt&quot;;
    //判断文件是否存在
    if(file_exists){
        $f = fopen($file_path,&quot;a+&quot;);

        //循环读取文件
        $buff = 1024;
        while(!feof($f)){
            $conn.=fread($f,$buff);
        }

        $conn = str_replace(&quot;\r\n&quot;,&quot;&lt;br/&gt;&quot;,$conn);
        echo $conn;
    }
    fclose($f);

?&gt;
</code></pre>

<hr/>
<h3>文件的写入</h3>
<pre><code>&lt;?php

        $file_path = &quot;writetest.txt&quot;;
        if(!file_exists($file_path)){
            die(&quot;文件不存在&quot;);
        }

        $f = fopen($file_path,&quot;a+&quot;);


        /*
        $conn = &quot;大家好\r\n&quot;;
        fwrite($f,$conn);
        fclose($f);
        echo &quot;插入成功&quot;;
        */

    /*
        $conn = &quot;加入10\r\n&quot;;
        for($i=0;$i&lt;5;++$i){
            fwrite($f,$conn);
        }
        fclose($f);
        echo &quot;插入5遍成功&quot;;
    */


        $conn = &quot;快速加入方法1\r\n&quot;;
        //追加
        //file_put_contents($file_path,$conn,FILE_APPEND);
        //覆盖
        //file_put_contents($file_path,$conn,LOCK_EX);
        //覆盖
        file_put_contents($file_path,$conn,FILE_USE_INCLUDE_PATH);
        echo &quot;快速插入成功&quot;;
?&gt;
</code></pre>

<hr/>
<h3>读取外部配置文件</h3>
<pre><code>&lt;?php

    $file_path = &quot;hello.txt&quot;;
    //以数组的形式返回
    $arr = parse_ini_file($file_path);
    print_r($arr);
?&gt;
</code></pre>

<hr/>
<h3>文件copy</h3>
<pre><code>&lt;?php

    //$file_path = &quot;F:\\anzhuang\\AppServ\\www\\file\\hello.txt&quot;;
    //$file_out_path = &quot;F:\\anzhuang\\AppServ\\www\\file\\copyhello.txt&quot;;

    $file_path = &quot;C:\\Users\\Administrator\\Desktop\\工具\\Tool\\FSCapture.exe&quot;;
    $file_out_path = &quot;F:\\anzhuang\\AppServ\\www\\file\\FSCapture.exe&quot;;
    //解决中文编码
    $file_path=iconv(&quot;utf-8&quot;,&quot;gb2312&quot;,$file_path);

    if(!file_exists($file_path)){
        die(&quot;文件不存在&quot;);
    }

    copy($file_path,$file_out_path) or die(&quot;copy 失败&quot;);
    echo &quot;copy 成功&quot;;

?&gt;
</code></pre>

<hr/>
<h3>创建文件夹</h3>
<pre><code>&lt;?php

    $file_path = &quot;F:\\anzhuang\\AppServ\\www\\file\\dir&quot;;

    //判断文件是否存在，如果不存在则创建
    if(!is_dir($file_path) &amp;&amp; mkdir($file_path)){
        echo &quot;创建成功&quot;;
    }else{
        echo &quot;文件存在，创建失败&quot;;
    }

?&gt;
</code></pre>

<h3>创建多层文件夹</h3>
<pre><code>//创建多层文件夹
$file_path = &quot;F:\\anzhuang\\AppServ\\www\\file\\dir\\aaa\\bbb\\ccc\\eee&quot;;
//判断文件夹是否存在，如果不存在则创建
if(!is_dir($file_path) &amp;&amp; mkdir($file_path,077,true)){
    echo &quot;创建成功&quot;;
}else{
    echo &quot;文件存在，创建失败&quot;;
}
</code></pre>

<hr/>
<h3>删除文件夹</h3>
<pre><code>&lt;?php

    $file_path = &quot;F:\\anzhuang\\AppServ\\www\\file\\test&quot;;
    if(!file_exists($file_path)){
        die(&quot;文件不存在&quot;);
    }
    //如果该文件夹下有子文件、目录都不可删除成功
    rmdir($file_path) or die(&quot;删除失败&quot;);
    echo &quot;删除成功&quot;;
?&gt;
</code></pre>

<hr/>
<h3>创建文件</h3>
<pre><code>&lt;?php

    $file_path = &quot;F:\\anzhuang\\AppServ\\www\\file\\test.txt&quot;;
    $f = fopen($file_path,&quot;w+&quot;);
    fwrite($f,&quot;hello&quot;);
    fclose($f);
    echo &quot;写入成功&quot;;

?&gt;
</code></pre>

<h3>删除文件</h3>
<pre><code>&lt;?php

    $file_path = &quot;F:\\anzhuang\\AppServ\\www\\file\\test.txt&quot;;
    //判断是否是个文件
    if(!is_file($file_path)){
        die(&quot;删除的文件不是个文件或不存在&quot;);
    }

    unlink($file_path) or die(&quot;删除失败&quot;);
    echo &quot;删除成功&quot;;

?&gt;
</code></pre>

<hr/>
<h3>上传</h3>
<pre><code>&lt;?php
    /*
    echo &quot;&lt;pre&gt;&quot;;
    print_r($_FILES);
    echo &quot;&lt;/pre&gt;&quot;;
    */
    //判断这文件是否可以上传
    if(is_uploaded_file($_FILES[&quot;fileinfo&quot;][&quot;tmp_name&quot;])){

        //将文件移到到你要保存的地方
        $upload_file = $_FILES[&quot;fileinfo&quot;][&quot;tmp_name&quot;];
        $move_to_file=&quot;F:\\anzhuang\\AppServ\\www\\file\\upload\\load\\&quot;.$_FILES[&quot;fileinfo&quot;][&quot;name&quot;];
        //echo $upload_file.&quot;|||&quot;.$move_to_file;

        //上传，且解决中文乱码
        move_uploaded_file($upload_file,iconv(&quot;utf-8&quot;,&quot;gb2312&quot;,$move_to_file)) or die(&quot;上传失败&quot;);
        echo &quot;上传成功&quot;;

    }else{
        echo &quot;文件不可上传&quot;;
    }
?&gt;
</code></pre>

<h3>为每个用户创建文件夹的上传</h3>
<pre><code>&lt;?php
        /*
        echo &quot;&lt;pre&gt;&quot;;
        print_r($_FILES);
        echo &quot;&lt;/pre&gt;&quot;;
    */      
        $userName = $_POST[&quot;userName&quot;];
        //判断这文件是否可以上传
        if(is_uploaded_file($_FILES[&quot;fileinfo&quot;][&quot;tmp_name&quot;])){

            $user_path = &quot;F:\\anzhuang\\AppServ\\www\\file\\upload\\load\\&quot;.$userName;
            if(!file_exists($user_path)){
                mkdir($user_path) or die(&quot;创建失败&quot;);
            }

            //将文件移到到你要保存的地方
            $upload_file = $_FILES[&quot;fileinfo&quot;][&quot;tmp_name&quot;];
            $move_to_file=$user_path.&quot;\\&quot;.$_FILES[&quot;fileinfo&quot;][&quot;name&quot;];
            //echo $upload_file.&quot;|||&quot;.$move_to_file;

            //上传，且解决中文乱码
            move_uploaded_file($upload_file,iconv(&quot;utf-8&quot;,&quot;gb2312&quot;,$move_to_file)) or die(&quot;上传失败&quot;);
            echo &quot;上传成功&quot;;

        }else{
            echo &quot;文件不可上传&quot;;
        }
?&gt;
</code></pre>

<hr/>
<h3>验证码</h3>
<pre><code>&lt;?php
    header ('Content-Type: image/png');

    $str=&quot;&quot;;
    for($i=0;$i&lt;4;$i++){
        $str.=rand(0,9);
    }

    //创建画布
    $im = imagecreatetruecolor(100,30);
    //画布里的颜色
    $color = imagecolorallocate($im, 233, 14, 91);
    //把字体写到画布里
    imagestring($im,5,20,10,$str,$color);
    //以png的格式显示在网页
    imagepng($im);
    //释放内存
    imagedestroy($im);
?&gt;
</code></pre>

<hr/>
<h3>sleep(2)：休眠2秒</h3>
<hr/>
<h3>ajax相关</h3>
<pre><code>&lt;script type=&quot;text/javascript&quot;&gt;
    //console.log(new XMLHttpRequest());

    function createxht(){
        var xht=null;
        if(window.XMLHttpRequest){
            xht = new XMLHttpRequest();
        }else if(window.ActiveXObject){
            xht = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
        }else{

        }

        return xht;
    }

    function ove(){
        //创建xht对象
        var xht = createxht();
        //打开链接
        xht.open(&quot;GET&quot;,&quot;count.php&quot;,true);//true是异步，false是同步
        //发送请求
        xht.send(null);

        //绑定返回状态的回调函数
        xht.onreadystatechange = function(){
            var str=&quot;&quot;;
            if(this.readyState == 4 &amp;&amp; this.status==200){
                str=str+&quot;状态码是：&quot;+this.status+&quot;&lt;br/&gt;&quot;+&quot;状态文字是：&quot;+this.statusText+&quot;&lt;br/&gt;&quot;
                +&quot;返回类型是：&quot;+this.getResponseHeader('Content-Type')+&quot;&lt;br/&gt;&quot;
                +&quot;返回的长度是：&quot;+this.getResponseHeader('Content-Length')+&quot;&lt;br/&gt;&quot;
                +&quot;返回的内容是：&quot;+this.responseText;
                document.getElementById(&quot;show&quot;).innerHTML = str;
            }else{
                document.getElementById(&quot;show&quot;).innerHTML = &quot;访问失败&quot;;
            }

            /*
            var show = document.getElementById(&quot;show&quot;);
            show.innerHTML = show.innerHTML+&quot;现在状态是&quot;+this.readyState+&quot;&lt;br/&gt;&quot;;
            */
        }

        //alert(&quot;hello&quot;);
    }

&lt;/script&gt;
</code></pre>

<hr/>
<h3>post akax请求注意</h3>
<pre><code>&lt;script type=&quot;text/javascript&quot;&gt;
    //console.log(new XMLHttpRequest());

    function createxhr(){
        var xhr=null;
        if(window.XMLHttpRequest){
            xhr = new XMLHttpRequest();
        }else if(window.ActiveXObject){
            xhr = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
        }else{

        }

        return xhr;
    }

    function sub(){
        var xhr = createxhr();
        var userName=document.getElementById(&quot;name&quot;).value;
        var email = document.getElementById(&quot;eml&quot;).value;

        //打开链接
        xhr.open(&quot;POST&quot;,&quot;count.php&quot;,true);

        //绑定状态回调函数
        xhr.onreadystatechange=function(){

            //如果状态码为4 且 状态文字为OK 则成功返回
            if(this.readyState == 4 &amp;&amp; this.statusText == &quot;OK&quot;){
                //获取访问返回的内容
                var content = this.responseText;
                alert(content);
            }
        }
        //post请求要设置下头文件
        xhr.setRequestHeader(&quot;Content-Type&quot;,&quot;application/x-www-form-urlencoded&quot;);

        //发送
        xhr.send(&quot;userName=&quot;+userName+&quot;&amp;email=&quot;+email);

        //不让表单提交
        return false;

    }

&lt;/script&gt;
</code></pre>

<hr/>
<h3>ajax 接收json 注意后台返回的编码（要utf-8）</h3>
<pre><code>&lt;script type=&quot;text/javascript&quot;&gt;
    //console.log(new XMLHttpRequest());

    function createxhr(){
        var xhr=null;
        if(window.XMLHttpRequest){
            xhr = new XMLHttpRequest();
        }else if(window.ActiveXObject){
            xhr = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
        }else{

        }

        return xhr;
    }

    function test1(){
        var xhr = createxhr();


        //打开链接
        xhr.open(&quot;GET&quot;,&quot;count.php&quot;,true);

        //绑定状态回调函数
        xhr.onreadystatechange=function(){

            //如果状态码为4 且 状态文字为OK 则成功返回
            if(this.readyState == 4 &amp;&amp; this.statusText == &quot;OK&quot;){
                //获取访问返回的内容
                var content = this.responseText;
                //以json接收
                var jsonObj=eval(&quot;(&quot;+content+&quot;)&quot;);

                alert(jsonObj);
                alert(jsonObj.姓名 + &quot; &quot;+jsonObj.年龄);
            }
        }

        //发送
        xhr.send(null);

    }
    //alert();
&lt;/script&gt;
</code></pre>

<hr/>
<h3>json跨域，有callback回调的可以跨，没有则不可以。可以用php的 file<em>get</em>contents（url）获取返回</h3>
<hr/>
<h3>FormData：可以把表单打包好，传给后台处理</h3>
<pre><code>&lt;script type=&quot;text/javascript&quot;&gt;
function send(){

        //这里要的是js对象，不是jq对象
        var fm = document.getElementById(&quot;tform&quot;);
        //var fm2 = $(&quot;form&quot;).get(0);//这样就可以兼容

         var fd = new FormData(fm2);

        //使用方式2
        //var fd = new FormData();
        //fd.append(&quot;aa&quot;,&quot;test&quot;);

        console.log(fm2);
        //提交过去
        var xhr = new XMLHttpRequest();
        xhr.open(&quot;POST&quot;,&quot;upload.php&quot;,true);

        xhr.onreadystatechange = function(){
            if(this.readyState == 4){
                alert(&quot;in&quot;);
                $(&quot;#show&quot;).html(this.responseText);
                alert(this.responseText);
            }
        }

        xhr.send(fd);   
    }


&lt;/script&gt;
</code></pre>

<hr/>
<h3>文件上传</h3>
<pre><code>&lt;script type=&quot;text/javascript&quot;&gt;

    function clears(){
        $(&quot;#show&quot;).empty();
        $(&quot;.bar&quot;).css(&quot;width&quot;,&quot;0%&quot;);
        $(&quot;.bar&quot;).text(&quot;&quot;);
    }

    function selectfile(){


        //创建FormData对象
        var fd = new FormData();

        //获取文件对象
        var pic = document.getElementsByTagName('input')[0].files[0];
        //var file2 = $('input').get(0).files;//等价

        fd.append(&quot;pic&quot;,pic);


        //提交过去
        var xhr = new XMLHttpRequest();
        xhr.open(&quot;POST&quot;,&quot;upload.php&quot;,true);

        //监听处理响应，当状态处于4的时候就算完成请求响应与得到返回信息
        xhr.onreadystatechange = function(){
            if(this.readyState == 4){

                var respon = this.responseText;
                if(respon == &quot;上传成功&quot; ){
                    alert(&quot;上传成功&quot;);
                }else{
                    alert(&quot;上传失败&quot;);
                }

                $(&quot;#show&quot;).html(respon);

            }
        }

        //监听上传的响应
        xhr.upload.onprogress = function(ev){
            console.log(ev);
            //统计文件是否还可以继续上传
            if(ev.lengthComputable){
                                    //已上传/总大小
                //console.log(100*ev.loaded/ev.total);
                var pro = 100*ev.loaded/ev.total;
                $(&quot;.bar&quot;).css(&quot;width&quot;,pro+&quot;%&quot;);
                //进度化整形
                var barText = parseInt(pro);
                $(&quot;.bar&quot;).text(barText+&quot;%&quot;);
            }
        }


        xhr.send(fd);


    }


&lt;/script&gt;
</code></pre>

<hr/>
<h3>大文件与带进度条的上传</h3>
<pre><code>&lt;script type=&quot;text/javascript&quot;&gt;

        /*
        *   全局变量
        */
    /*----------------------------------------------------------------------------*/
        var xhr = new XMLHttpRequest();
        var clock;//定时
        const LENGTH = 10 * 1024 *1024; //固定上传的字节
        var upload_Start = 0;           //从哪个字节位置开始上传
        var upload_End = upload_Start + LENGTH; //截取到这个字节位置就结束
        var blob = 0;                   //截取的二进制大小
        var boo = false;                    //true代表正在上传
    /*----------------------------------------------------------------------------*/

        //清空进度条和文字
        function clears(){
            $(&quot;#show&quot;).empty();
            $(&quot;.bar&quot;).css(&quot;width&quot;,&quot;0%&quot;);
            $(&quot;.bar&quot;).text(&quot;&quot;);
        }

    /*******************被selectfile执行*********************************/
        //上传
        function up(fd){
            xhr.open(&quot;POST&quot;,&quot;upload2.php&quot;,false);
            xhr.send(fd);
        }
    /*****************第1步****************************/
        //当点击上传的时候执行这个响应
        function startUp(){
            clock = setInterval(selectfile,1000);
        }


    /*******************被第1步执行*********************************/
        function selectfile(){

            if(boo == true){
                return ;
            }
            //获取文件对象
            var file = $(&quot;input&quot;).get(0).files[0];
            /*
            *   循环前要做的准备：
            *   1.slice(参数1，参数2) 方法的 
            *       参数1是从哪个字节位置开始上传
            *       参数2是截取到这个字节位置就结束
            */

            //循环地切割上传
            var fileSize = file.size;
            var fileName = file.name;

            if(upload_Start &gt; fileSize){
                clearInterval(clock);
                alert(&quot;上传完成&quot;);
                return ;
            }

            //切割
            blob = file.slice(upload_Start,upload_End);
            //使用ajax上传
            fd = new FormData();
            fd.append(&quot;doc&quot;,blob);
            fd.append(&quot;fileName&quot;,fileName);
            up(fd);

            //重新设置切割的开始位置 和 末尾位置
            upload_Start = upload_End;
            upload_End = upload_Start + LENGTH;
            boo = false;
            var pro =   upload_Start/fileSize;
            if(pro &gt; 100){
                pro = 100;
                //console.log(&quot;大于1了&quot; +&quot;pro is &quot;+pro);
            }
            var trpro = parseInt(pro * 100);
            $(&quot;.bar&quot;).css(&quot;width&quot;,trpro +&quot;%&quot;);
            $(&quot;.bar&quot;).text(trpro +&quot;%&quot;);
            //console.log(upload_Start + &quot; &quot;+upload_End );
            console.log(pro + &quot; &quot;+upload_Start +&quot; &quot;+fileSize);


    }
</code></pre>

<h3>字符串的截取，从第0个位置开始，到第4个位置结束</h3>
<pre><code>substr($key, 0,5)；
</code></pre>

<h1>文件</h1>
<h3>1.总空间</h3>
<pre><code>disk_total_space($path)
</code></pre>

<h3>获取问最后访问的时间</h3>
<pre><code>fileatime($path)
</code></pre>

<h3>获取文件最后改变的时间(文件里的内容最后修改的时间)</h3>
<pre><code>filectime($path)
</code></pre>

<h3>获取文件最后修改时间(所有者、权限的改变)</h3>
<pre><code>filemtime($path)
</code></pre>

<hr/>
<h3>2.设计区时</h3>
<pre><code>data_default_timezone_set(&quot;Asia/Shanghai&quot;);
</code></pre>

<h3>3.时间的显示</h3>
<pre><code>data('Y-m-d' H:i:s,时间戳);
</code></pre>

<h3>获取用户ip地址</h3>
<pre><code> $address=&quot;&quot;;

//获取客户端ip
if (getenv(&quot;HTTP_CLIENT_IP&quot;))
    $address = getenv(&quot;HTTP_CLIENT_IP&quot;);
//获取代理ip
else if(getenv(&quot;HTTP_X_FORWARDED_FOR&quot;))
    $address = getenv(&quot;HTTP_X_FORWARDED_FOR&quot;);
//获取本地电脑ip
else if(getenv(&quot;REMOTE_ADDR&quot;))
    $address = getenv(&quot;REMOTE_ADDR&quot;);
else
    $address = &quot;Unknow&quot;;
</code></pre>

<h3>获取最后一次出现的位置</h3>
<pre><code>strrchr($city,&quot;,&quot;)
</code></pre>

<h3>解决json封装乱码问题</h3>
<pre><code>json_encode($arr,JSON_UNESCAPED_UNICODE)
</code></pre>

<h3>new 自己</h3>
<pre><code> $s = new self();
</code></pre>

<h3>//静态方法的调用</h3>
<p>$con = t::test();</p>
<h3>文件的一些处理</h3>
<h3>获取路径的信息</h3>
<pre><code>pathinfo（$file）
</code></pre>

<h3>dirname</h3>
<h3>获取文件路径</h3>
<pre><code>__FILE__
</code></pre>

<h3>读取文件里的内容</h3>
<pre><code>file_get_contents（$file）
</code></pre>

<h3>fopen</h3>
<pre><code>a、a+是在文件后面追加。w：原来的文件会被清空
</code></pre>

<h3>fgets（）：读一行</h3>
<h3>file（file）：直接读取文件的内容，并按行拆成数组</h3>
<h3>字符串分割</h3>
<pre><code>explode（“，”，$str）;
</code></pre>

<h3>读取解析csv文件（读取一行）</h3>
<pre><code>getscsv（$fp）
</code></pre>

<h3>删除文件</h3>
<pre><code>unlink（$file）
</code></pre>

<h3>查找字符串首次出现的位置</h3>
<pre><code>stripos（$str,&quot;fucck&quot;）
</code></pre>

<h3>打开一个连接</h3>
<pre><code>opendir（$path）
</code></pre>

<h3>读取打开文件的资源句柄</h3>
<pre><code>readdir（$resource）
</code></pre>

<h3>读取某文件夹下的所有文件</h3>

</body>
</html>
<!-- This document was created with MarkdownPad, the Markdown editor for Windows (http://markdownpad.com) -->
